//
// Description: 67. 二进制求和
// Created by Loading on 2025/3/31.
//

#include <bits/stdc++.h>

using namespace std;

string addBinary(string a, string b) {
    string res;
    int add = 0;

    int m = a.size(), n = b.size();
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    int i = 0;
    // 公共长度部分
    for (; i < m && i < n; ++i) {
        add += a[i] - '0' + b[i] - '0';
        res += to_string(add % 2);
        add /= 2;
    }

    // 剩余部分
    while (i < m) {
        add += a[i] - '0';
        res += to_string(add % 2);
        add /= 2;
        ++i;
    }
    while (i < n) {
        add += b[i] - '0';
        res += to_string(add % 2);
        add /= 2;
        ++i;
    }
    // 判断最高位
    if (add) {
        res += "1";
    }

    reverse(res.begin(), res.end());

    return res;
}

int main() {
    string a = "11";
    string b = "1";

    auto res = addBinary(a, b);

    cout << res << endl;

    return 0;
}
